package com.fa7.trabalho.controller;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;

import com.fa7.trabalho.dao.UsuarioDao;
import com.fa7.trabalho.entidades.Mensagem;
import com.fa7.trabalho.entidades.Perfil;
import com.fa7.trabalho.entidades.Usuario;
import com.fa7.trabalho.service.MensagemService;
import com.fa7.trabalho.service.PerfilService;

@ManagedBean
public class TimelineBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -9085473952403069628L;

	private Usuario usuarioLogado;

	private String novaMensagemTexto;

	private List<Mensagem> mensagens;

	@ManagedProperty(name = "usuarioDao", value = "#{usuarioDao}")
	private UsuarioDao usuarioDao;
	
	@ManagedProperty(name = "mensagemService", value = "#{mensagemService}")
	private MensagemService mensagemService;
	
	@ManagedProperty(name = "perfilService", value = "#{perfilService}")
	private PerfilService perfilService;
	

	@PostConstruct
	public void init() {
		setUsuarioLogado(new Usuario());
		SecurityContext context = SecurityContextHolder.getContext();
		Authentication authentication = context.getAuthentication();
		if (authentication instanceof Authentication) {
			setUsuarioLogado(getUsuarioDao().findByUsername(
					((User) authentication.getPrincipal()).getUsername()));
		}

		carregarMensagens();
	}

	public String enviarMensagem() {
		try {

			Perfil perfilUsuario = usuarioLogado.getPerfil();
			perfilService.enviarMensagemPerfil(this.novaMensagemTexto, perfilUsuario);
			carregarMensagens();
			
			setNovaMensagemTexto("");

		} catch (Exception e) {
			System.out.println("error:" + e.getMessage());
		}

		return "";

	}

	public void carregarMensagens() {
		setMensagens(mensagemService.retornaMensagensPerfil(usuarioLogado.getPerfil()));
	}

	public UsuarioDao getUsuarioDao() {
		return usuarioDao;
	}

	public void setUsuarioDao(UsuarioDao usuarioDao) {
		this.usuarioDao = usuarioDao;
	}

	public String getNovaMensagemTexto() {
		return novaMensagemTexto;
	}

	public void setNovaMensagemTexto(String novaMensagemTexto) {
		this.novaMensagemTexto = novaMensagemTexto;
	}

	public Usuario getUsuarioLogado() {
		return usuarioLogado;
	}

	public void setUsuarioLogado(Usuario usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
	}

	public List<Mensagem> getMensagens() {
		return mensagens;
	}

	public void setMensagens(List<Mensagem> mensagens) {
		this.mensagens = mensagens;
	}

	public MensagemService getMensagemService() {
		return mensagemService;
	}

	public void setMensagemService(MensagemService mensagemService) {
		this.mensagemService = mensagemService;
	}

	public PerfilService getPerfilService() {
		return perfilService;
	}

	public void setPerfilService(PerfilService perfilService) {
		this.perfilService = perfilService;
	}

}
